package controller;

import java.util.Arrays;

/**
 * @author Mr.gao
 * @date 2021/4/25 17:42
 **/
public class DoubleArray {

    public static void main(String[] args) {
        /**
         * 定义一个长度为[16][16]的整型二维数组并随机生成所有位置的元素值(1~100)，
         * 分别实现二维数组每行元素的累加和及每列元素的累加和并打印。
         * 再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
         */
        //定义一个长度为[16][16]的整型二维数组
        int[][] array = new int[16][16];

        //利用随机数为二维数组赋值
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                //随机生成所有位置的元素值(1~100)
                int num = (int) (Math.random() * 100 + 1);
                array[i][j] = num;
            }
        }

        /**
         * 定义变量进行累加对应的数组分别进行存储
         */
        int a = 0;
        int b = 0;
        int c = 0;
        int d = 0;
        int e = 0;
        int f = 0;
        int g = 0;
        int[] array1 = new int[16];
        int[] array2 = new int[16];
        int[] array3 = new int[16];
        int[] array4 = new int[16];
        int[] array5 = new int[16];
        int[] array6 = new int[16];
        //计算整个数组每行的每列以及右上角的行列和
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                //遍历累加整个数组每行的元素
                a = a + array[i][j];
                //遍历累加整个数组每列的元素
                b = b + array[j][i];
                //遍历累加右上角每行的元素
                if (j >= i) {
                    //右上角每一行
                    c = c + array[i][j];
                    //左下角每一列
                    g = g + array[j][i];
                }
                //判断每次累加停止的条件--> 即每一行的最后一个元素
                if (j == array.length - 1) {
                    //将累加和存入数组中并且将变量清零重新计算下一行或者下一列
                    array1[i] = a;
                    array2[i] = b;
                    array5[i] = c;
                    array4[i] = g;
                    g = 0;
                    a = 0;
                    b = 0;
                    c = 0;
                }
                //遍历累加右上角每列的元素
                if (j <= i) {
                    //右上角每一列
                    d = d + array[j][i];
                    //左下角每一行
                    f = f + array[i][j];
                }
                //判断每一列终止的条件即行数等于列数的时候
                if (i == j) {
                    array6[i] = d;
                    e = e + array[j][i];
                    array3[i] = f;
                    f = 0;
                    d = 0;
                }
            }
        }


        //循环打印二维数组
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + "\t");
            }
            System.out.println();
        }

        //将各个行列的和进行输出打印
        System.out.println("每一行的和分别为：" + Arrays.toString(array1));
        System.out.println("每一列的和分别为：" + Arrays.toString(array2));
        System.out.println("左下角每一行的和分别为：" + Arrays.toString(array3));
        System.out.println("左下角每一列的和分别为：" + Arrays.toString(array4));
        System.out.println("右上角角每一行的和分别为：" + Arrays.toString(array5));
        System.out.println("右上角每一列的和分别为：" + Arrays.toString(array6));
        System.out.println("左下角斜边和为：" + e);

    }
}
